package tomcat;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

/**
 * 第一个版本的tomcat
 * 可以完成 接收浏览器/客户端的请求并返回信息
 */
public class LmyTomcatV1 {

    public static void main(String[] args) throws Exception {

        //1.创建ServeSocket，在8080端口监听
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("=====myTomcat在8080端口监听=====");
        while (!serverSocket.isClosed()) {
            //等待浏览器/客户端的连接
            //如果有连接过来，就会创建一个socket
            //socket就是客户端和服务端的连接
            Socket socket = serverSocket.accept();
            //接收浏览器发送的数据
            //先得到socket的字节流
            InputStream inputStream = socket.getInputStream();
            //转成字符流(可以一行一行地读取)
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
            //使用缓冲流
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String message = null;
            System.out.println("======接收到浏览器发送的数据======");
            //循环读取
            while ((message = bufferedReader.readLine()) != null) {
                //判断message长度是否为0
                if (message.length() == 0) {
                    break;
                }
                System.out.println(message);
            }


            //tomcat回送http响应
            OutputStream outputStream = socket.getOutputStream();
            //按照http响应方式返回数据
            //先构建http响应头 \r\n表示换行
            String respHeader = "HTTP/1.1 200 OK\r\n" +
                    "Content-Type: text/html;charset=utf-8\r\n\r\n";
            //再构建http响应体
            String resp = respHeader + "hi, lmy刘明阳~";
            //将resp字符串以字节方式回送
            outputStream.write(resp.getBytes());
            outputStream.flush();

            //关闭资源
            inputStream.close();
            outputStream.close();
            socket.close();

        }
    }
}
